package throws_;

/**
 * @Author 小闽
 * @Date 2024/9/24 18:32
 * @PackageName: throws_
 * @ClassName: ThrowException
 * @Description: throw和throws的区别
 * @Version 1.0
 */
public class ThrowException {
    public static void main(String[] args) {
        try {
            ReturnExceptionDemo.methodA();
        }catch (Exception e){
            System.out.println(e.getMessage()); // 在这里会捕获methodA()方法中的异常
        }
        ReturnExceptionDemo.methodB(); // 这里调用methodB()方法
        /**
         * 1.进入方法A
         * 2.用A方法的finally
         * 3.制造异常
         * 4.进入方法B
         * 5.调用B方法的finally
         */
    }
}
// 创建ReturnExceptionDemo类
class ReturnExceptionDemo{
    // 静态方法methodA()
    static void methodA(){
        try{
            System.out.println("进入方法A"); // 首先这行代码会被执行
            throw new RuntimeException("制造异常"); // 然后不会马上输出 "制造异常"
        }finally {
            System.out.println("用A方法的finally"); // 先输出finally中的代码必须执行
        }
    }
    // 静态方法methodB()
    static void methodB(){ // 在这里程序进入
        try{
            System.out.println("进入方法B"); // 这里会执行 "进入方法B"
            return;  // 这里的return不会立即执行
        }finally {
            System.out.println("调用B方法的finally"); // finally中的代码会必须执行，最后输出 "调用B方法的finally"
        }
    }
}